home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / DB_CLIPP / 2510.ZIP / TRSOURCE.EXE / POKEDBL.ASM < prev    next >
Assembly Source File  |  1990-10-22  |  4KB  |  114 lines

  1. ; POKEDBL.ASM
  2. ;
  3. ; by Ralph Davis
  4. ; modified by Leonard Zerman
  5. ;
  6. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  7. ;
  8.  
  9.          PUBLIC   POKEDBL
  10.  
  11.          INCLUDE  EXTENDA.MAC
  12.  
  13.          EXTRN    _TR_POKE_PARMS:FAR
  14.          EXTRN    __TR_HTOD:FAR
  15.  
  16. DGROUP GROUP _DATA
  17. ;*****************************************************
  18. _DATA  SEGMENT  WORD  PUBLIC  'DATA'
  19.  
  20. ;
  21. ;    Saves input segment and offset
  22. ;
  23. SEG_ADDR    DW       ?
  24. OFF_ADDR    DW       ?
  25. ;
  26. _DATA  ENDS
  27. ;*****************************************************
  28.  
  29. ;*****************************************************
  30. POKEDBL_TEXT SEGMENT BYTE PUBLIC 'CODE'
  31.          ASSUME   CS:POKEDBL_TEXT,DS:_DATA
  32. ;-----------------------------------------------------
  33. ;
  34. ;     POKEDBL(segment, offset, value)
  35. ;
  36. ;
  37. ;     pokes value as 8-byte floating point value
  38. ;
  39. ;        segment = SPACE(4)    && hexadecimal string
  40. ;        offset  = number < 65536 or hexadecimal string
  41. ;        value   = number or hexadecimal string
  42. ;
  43. ;        Returns:  .F. if less than three parameters passed
  44. ;                  .T. otherwise
  45. ;
  46. ;--------------
  47. POKEDBL PROC     FAR
  48.          PUSH     BP
  49.          MOV      BP,SP
  50.          PUSH     DS
  51.          PUSH     ES
  52.          PUSH     BX
  53.          PUSH     CX
  54.          PUSH     DX
  55.          PUSH     SI
  56.          PUSH     DI
  57.          CALL     _TR_POKE_PARMS ; returns segment in DX,
  58.                                  ; offset in AX
  59.          JL       POKEDBL_ERR    ; Sign flag set means less than 2 parms
  60.          PUSH     DS             ; Save caller's DS
  61.          MOV      BX,_DATA        ; Point DS to our data segment
  62.          MOV      DS,BX
  63.          MOV      SEG_ADDR,DX
  64.          MOV      OFF_ADDR,AX
  65.          POP      DS             ; Restore caller's DS
  66.          GET_PTYPE 3             ; find out if parameter is numeric
  67.                                  ; or character
  68.          AND      AX,CHARACTER   ; Is it a hexadecimal string?
  69.          JNZ      POKEDBL_HEX    ; yes
  70.          JMP      SHORT POKE_DBL_4  ; no
  71.  
  72. POKEDBL_HEX:
  73.          GET_CHAR 3              ; Get parameter as char *
  74.          PUSH     DX             ; Call _TR_HTOD
  75.          PUSH     AX
  76.          CALL     __TR_HTOD       ; AX:BX:CX:DX now contains 
  77.                                  ; parameter as long int
  78.          ADD      SP,4           ; Discard parameters PUSHed onto stack
  79.          JMP      SHORT POKE_DBL_5
  80. POKE_DBL_4:
  81.          GET_DBL  3              ; Get parameter as double precision number
  82.                                  ;  in AX:BX:CX:DX
  83. POKE_DBL_5:
  84.          MOV      SI,_DATA
  85.          MOV      DS,SI
  86.          MOV      SI,SEG_ADDR    ; restore address saved by _TR_POKE_PARMS
  87.          MOV      DI,OFF_ADDR
  88.          MOV      DS,SI          ; restore segment 
  89.          MOV      [DI],DX        ; poke low byte
  90.          MOV      [DI+2],CX      ; poke next byte
  91.          MOV      [DI+4],BX      ; poke next byte
  92.          MOV      [DI+6],AX      ; poke high byte
  93.          MOV      AX,1           ; Return .T. for successful completion
  94.          JMP      SHORT POKEDBL_EXIT   ; and we're done
  95. POKEDBL_ERR:
  96.          MOV      AX,0           ; return .F. for error condition
  97.  
  98. POKEDBL_EXIT:
  99.          POP      DI
  100.          POP      SI
  101.          POP      DX   
  102.          POP      CX
  103.          POP      BX
  104.          POP      ES
  105.          POP      DS
  106.          POP      BP
  107.          RET_LOGICAL AX         ; return .T. or .F. to caller
  108.          RET
  109. POKEDBL ENDP
  110. ;------------------------------------------------
  111. POKEDBL_TEXT   ENDS
  112. ;************************************************
  113.          END
  114.